今天,我們就來看一個指標的範例,測試一下對於指標的概念,是不是真的熟悉~
看一下下面的程式碼:
#include<stdio.h>
int main(){
int data[] = {10, 21, 35, 47, 51};
int *p[] = {data, data+1, data+2, data+3, data+4};
int **p_p = p;
printf("*p[1] = %d\n\n", *p[1]);
printf("**p_p = %d\n\n", **p_p);
printf("*(*p_p+1) = %d\n\n", *(*p_p+1));
printf("*(*(p_p+1)+2) = %d\n\n", *(*(p_p+1)+2));
return 0;
}
不知道大家會不會跟我一樣,看到兩顆星星 **
就開始害怕,想說這到底是甚麼東西?
但請仔細思考、並複習一下前三天講的,就會發現沒有那麼難的!
有答案了嗎?讓我們先看看輸出結果!
我們把圖畫出來,再解釋:
為了方便說明,以下粗體字代表的是位址,且我們用上面那張圖結合程式來說明:
data[]
,並在裡面放五筆資料。再宣告指標陣列 p[]
,這個指標陣列裡面的資料放的是 data[]
五筆資料的位址。p_p
,裡面放的是指標 p
的位址(p)。*p[1]
,p[1]
裡面放的位址是 data+1 ,我們對 data+1 取值,所以輸出 21。**p_p
,也就是在 p
位址放的位址(data)的值,所以輸出 10。*(*p_p+1)
,因為*p_p
是 p
位址放的位址(data),然後 data+1 取值,所以印出 21。*(*(p_p+1)+2)
,*(p_p+1)
等於 p+1
位址放的位址(data+1),然後我們把他加 2 後再取值,所以輸出是 47。不知道大家的腦袋有沒有覺得繞來繞去的感覺~如果以上內容都非常清楚的話,那恭喜你!基本的指標概念應該已經都學起來了!但是,指標的內容蠻容易忘記的,所以記得要常常複習喔~
明天,讓我們來講講新的東西 - 函式!